import java.awt.*;
import java.awt.font.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import javax.swing.*;

public class TextOnBackground extends JPanel {
	BufferedImage image;
	String text = "Hello World";

	public TextOnBackground(BufferedImage image) {
		this.image = image;
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D) g;
		g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
		int w = getWidth();
		int h = getHeight();
		// Draw image, centered.
		int x = (w - image.getWidth()) / 2;
		int y = (h - image.getHeight()) / 2;
		g2.drawImage(image, x, y, this);
		// Draw text centered over image.
		Font font = g2.getFont().deriveFont(36f);
		g2.setFont(font);
		FontRenderContext frc = g2.getFontRenderContext();
		float width = (float) font.getStringBounds(text, frc).getWidth();
		LineMetrics lm = font.getLineMetrics(text, frc);
		float sx = (w - width) / 2;
		float sy = (h + lm.getHeight()) / 2 - lm.getDescent();
		g2.setPaint(Color.red);
		g2.drawString(text, sx, sy);
	}
	public static void main(String[] args) throws IOException {
		String path = "img/background.jpg";
		BufferedImage image = ImageIO.read(new File(path));
		TextOnBackground test = new TextOnBackground(image);
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.getContentPane().add(test);
		f.setSize(400, 400);
//		f.setLocation(200, 200);
		f.setVisible(true);
	}
}